﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace BLL
{
    public class Seguranca
    {
        public class entUsuario
        {
            private string login;
            public string Login
            {
                get { return login; }
                set { login = value; }
            }

            private string senha;
            public string Senha
            {
                get { return senha; }
                set { senha = value; }
            }

            private string nomeCompleto;
            public string NomeCompleto
            {
                get { return nomeCompleto; }
                set { nomeCompleto = value; }
            }

            private string idUsuario;
            public string IdUsuario
            {
                get { return idUsuario; }
                set { idUsuario = value; }
            }

            private bool loginSucesso;
            public bool LoginSucesso
            {
                get { return loginSucesso; }
                set { loginSucesso = value; }
            }

            private string email;
            public string Email
            {
                get { return email; }
                set { email = value; }
            }

            private string dataCadastro;
            public string DataCadastro
            {
                get { return dataCadastro; }
                set { dataCadastro = value; }
            }
        }

        public bool LoginUsuario(entUsuario entUs)
        {
            string procName = "stpSeguranca";
            
            List<SqlParameter> parameter = new List<SqlParameter>();
            parameter.Add(new SqlParameter("@Operacao", 2));
            parameter.Add(new SqlParameter("@NomeUsuario", entUs.Login));            

            DataTable dt = new DataTable();
            dt = DAL.DAL.ExecSPWithReturn(parameter, procName);

            if (dt != null)
            {
                string senha = dt.Rows[0]["Senha"].ToString();
                if (senha == entUs.Senha)
                {
                    entUs.IdUsuario = dt.Rows[0]["IDLogin"].ToString();
                    entUs.NomeCompleto = dt.Rows[0]["Nome"].ToString();
                    entUs.LoginSucesso = true;
                    
                    return true;
                }                
                else
                    throw new Exception("A senha informada é inválida");
            }
            else
            {
                throw new Exception("Usuário não encontrado no banco de dados.");
            }            
        }

        public DataTable ProgramasUsuarioPermissao(string idUsuario)
        { 
            string procName = "stpSeguranca";            
            List<SqlParameter> parameter = new List<SqlParameter>();
            parameter.Add(new SqlParameter("@Operacao", 1));
            parameter.Add(new SqlParameter("@IDUsuario", idUsuario));            

            DataTable dt = new DataTable();
            return dt = DAL.DAL.ExecSPWithReturn(parameter, procName);
        }

        public DataTable ListaUsuarios()
        {
            string procName = "stpSeguranca";
            List<SqlParameter> parameter = new List<SqlParameter>();
            parameter.Add(new SqlParameter("@Operacao", 3));

            DataTable dt = new DataTable();
            return dt = DAL.DAL.ExecSPWithReturn(parameter, procName);
        }

        public DataTable ListaProgramasPermissao(int idUsuario)
        {
            string procName = "stpSeguranca";
            List<SqlParameter> parameter = new List<SqlParameter>();
            parameter.Add(new SqlParameter("@Operacao", 4));
            parameter.Add(new SqlParameter("@IDUsuario", idUsuario));

            DataTable dt = new DataTable();
            return dt = DAL.DAL.ExecSPWithReturn(parameter, procName);
        }

        public entUsuario CarregaDetalhesDoUsuario(string idUsuario)
        {
            string procName = "stpSeguranca";
            List<SqlParameter> parameter = new List<SqlParameter>();
            parameter.Add(new SqlParameter("@Operacao", 5));
            parameter.Add(new SqlParameter("@IDUsuario", idUsuario));

            DataTable dt = new DataTable();
            dt = DAL.DAL.ExecSPWithReturn(parameter, procName);

            entUsuario user = new entUsuario();
            if (dt.Rows.Count > 0)
            {
                user.IdUsuario = dt.Rows[0]["IDLogin"].ToString();
                user.DataCadastro = dt.Rows[0]["dtCadastro"].ToString();
                user.NomeCompleto = dt.Rows[0]["Nome"].ToString();
                user.Login = dt.Rows[0]["NomeUsuario"].ToString();
                user.Email = dt.Rows[0]["Email"].ToString();
                user.Senha = dt.Rows[0]["Senha"].ToString();
                user.LoginSucesso = true;
            }

            return user;
        }

        public bool AtualizaDetalhesDoUsuario(entUsuario user)
        {
            string procName = "stpSeguranca";
            List<SqlParameter> parameter = new List<SqlParameter>();
            parameter.Add(new SqlParameter("@Operacao", 6));
            parameter.Add(new SqlParameter("@Senha", user.Senha));
            parameter.Add(new SqlParameter("@Nome", user.NomeCompleto));
            parameter.Add(new SqlParameter("@Email", user.Email));
            parameter.Add(new SqlParameter("@NomeUsuario", user.Login));
            parameter.Add(new SqlParameter("@IDUsuario", user.IdUsuario));

            try
            {
                DAL.DAL.ExecSP(parameter, procName);
                return true;
            }
            catch (Exception)
            {                
                throw;
            }            
        }

        public entUsuario InsereDetalhesDoUsuario(entUsuario user)
        {
            string procName = "stpSeguranca";
            List<SqlParameter> parameter = new List<SqlParameter>();
            parameter.Add(new SqlParameter("@Operacao", 7));
            parameter.Add(new SqlParameter("@Senha", user.Senha));
            parameter.Add(new SqlParameter("@Nome", user.NomeCompleto));
            parameter.Add(new SqlParameter("@Email", user.Email));
            parameter.Add(new SqlParameter("@NomeUsuario", user.Login));

            DataTable dt = new DataTable();
            dt = DAL.DAL.ExecSPWithReturn(parameter, procName);

            if (dt != null)
                user.IdUsuario = dt.Rows[0]["IDLogin"].ToString();

            return user;
        }

        public void DefinePermissoesAcessoUsuario(string idUsuario, string idPrograma, string acao)
        {
            string procName = "stpSeguranca";
            List<SqlParameter> parameter = new List<SqlParameter>();
            parameter.Add(new SqlParameter("@Operacao", 8));
            parameter.Add(new SqlParameter("@IDUsuario", idUsuario));
            parameter.Add(new SqlParameter("@IDPrograma", idPrograma));
            parameter.Add(new SqlParameter("@Acao", acao));

            DAL.DAL.ExecSP(parameter, procName);
        }
    }
}
